#include<vector>
#include<algorithm>
using namespace std;
class Solution {
public:
    int maxProfit(vector<int>& prices, int fee) {
        //状态表示 dp[i]:第i天后的最大利润
        //        [0]持有股票 [1]不持有股票
        //状态机,状态转移方程:dp[i][0]=max(dp[i-1][0],dp[i-1][1]-p[i])
        //                  dp[i][1]=max(dp[i-1][1],dp[i-1][0]+p[i]-fee)
        //初始化 dp[0][0]=p[i]*-1 dp[0][1]=0
        vector<vector<int>>dp(prices.size(),vector<int>(2,0));
        dp[0][0]-=prices[0];
        for(int i=1;i<dp.size();i++){
            dp[i][0]=max(dp[i-1][0],dp[i-1][1]-prices[i]);
            dp[i][1]=max(dp[i-1][1],dp[i-1][0]+prices[i]-fee);
        }
        return max(dp.back()[0],dp.back()[1]);
    }
};